﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crosland.Automotriz.Core;

namespace Crosland.Automotriz.Data.Dao.Linq
{
    public class clsTd_ProveedorDAO
    {
        private readonly AutomotrizEntities ContextoDeObjs = new AutomotrizEntities();

        public bool Insertar(TD_PROVEEDOR Obj)
        {
            try
            {
                ContextoDeObjs.AddObject("TD_PROVEEDOR", Obj);
                ContextoDeObjs.SaveChanges();
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }

        public bool Modificar(TD_PROVEEDOR obj)
        {
            try
            {
                ContextoDeObjs.AttachTo("TD_PROVEEDOR", obj);
                ContextoDeObjs.ObjectStateManager.ChangeObjectState(obj, System.Data.EntityState.Modified);
                ContextoDeObjs.SaveChanges();
            }
            catch (Exception)
            {
                return false;

            }
            return true;
        }

        public bool Eliminar(TD_PROVEEDOR obj)
        {
            try
            {
                ContextoDeObjs.AttachTo("TD_PROVEEDOR", obj);
                ContextoDeObjs.DeleteObject(obj);
                ContextoDeObjs.SaveChanges();
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }

        public IEnumerable<Object> listar()
        {

            IEnumerable<Object> lista = new List<Object>();
            try
            {
                var q = from c in ContextoDeObjs.TD_PROVEEDOR
                        select new { c.COD_PROVEEDOR, c.ID_PROVEEDOR, NOM_PROVEEDOR = c.NOM_PROVEEDOR.Trim(), c.COD_PAIS, c.NIF };

                lista = q.OrderBy(f1 => f1.NOM_PROVEEDOR.Trim()).ToList();

            }
            catch (Exception)
            {
                lista = null;
            }
            return lista;
        }

        public IEnumerable<Object> listar2(int? intidProv)
        {
            IEnumerable<Object> lista = new List<Object>();
            try
            {
                var q = from c in ContextoDeObjs.TD_PROVEEDOR
                        where c.ID_PROVEEDOR == intidProv
                        orderby c.NOM_PROVEEDOR.Trim() ascending
                        select new { c.COD_PROVEEDOR, c.ID_PROVEEDOR, c.NOM_PROVEEDOR, c.COD_PAIS, c.NIF };
                lista = q.ToList();
            }
            catch (Exception)
            {
                lista = null;
            }
            return lista;
        }

        public List<TD_PROVEEDOR> listar(int? intidProv)
        {
            List<TD_PROVEEDOR> lista = new List<TD_PROVEEDOR>();
            try
            {

                var prov = from c in ContextoDeObjs.TD_PROVEEDOR
                           where c.ID_PROVEEDOR == intidProv
                           orderby c.NOM_PROVEEDOR.Trim() ascending
                           select c; // new { c.COD_PROVEEDOR, c.ID_PROVEEDOR, c.NOM_PROVEEDOR, c.COD_PAIS, c.NIF };

                lista = prov.ToList();
            }
            catch (Exception)
            {
                lista = null;
            }

            return lista;
        }

        public IEnumerable<Object> listar(String strDesProveedor, int intCantFilas)
        {
            IEnumerable<Object> lista = new List<Object>();
            try
            {
                var q = from c in ContextoDeObjs.TD_PROVEEDOR
                        orderby c.NOM_PROVEEDOR ascending
                        select new
                        {
                            c.ID_PROVEEDOR,
                            c.COD_PROVEEDOR,
                            NOM_PROVEEDOR = c.NOM_PROVEEDOR.Trim()
                        };
                
                if (strDesProveedor.Contains("%"))
                {
                    String[] strDesProveedores = strDesProveedor.Split('%');
                    q = q.Where(f1 => strDesProveedores.All(y => f1.NOM_PROVEEDOR.ToUpper().Contains(y.ToUpper())));
                }
                else
                {
                    if (strDesProveedor != String.Empty) q = q.Where(f1 => f1.NOM_PROVEEDOR.ToUpper().Contains(strDesProveedor.ToUpper()));
                }

                lista = q.ToList().Take(intCantFilas);
            }
            catch (Exception)
            {
                lista = null;
                throw;
            }

            return lista;
        }



        public List<TD_PROVEEDOR_EN> ListarProveedorGeneral() {
            List<TD_PROVEEDOR_EN> list = new List<TD_PROVEEDOR_EN>();
            try
            {
                var queryText = "SELECT tp.ID_PROVEEDOR,tp.NOM_PROVEEDOR FROM TD_PROVEEDOR tp INNER JOIN T_MAE_TABLA_GENERAL_DET tmtgd ON tp.COD_PROVEEDOR=tmtgd.DES_CORTA INNER JOIN T_MAE_TABLA_GENERAL_CAB tmtgc ON tmtgc.ID_GENERAL_CAB = tmtgd.ID_GENERAL_CAB WHERE tmtgc.NOM_TABLA='T_PROVEEDORES_AUTOMOTRIZ'";
                var l = ContextoDeObjs.ExecuteStoreQuery<TD_PROVEEDOR_EN>(queryText);
                list = l.ToList();
            }
            catch (Exception)
            {
                
                throw;
            }

            return list;
        }
    }
}
